package com.wjs.service.impl;

import com.wjs.entity.User;
import com.wjs.exception.BusinessException;
//import com.wjs.mapper.EventCategoryMapper;
//import com.wjs.mapper.EventMapper;
import com.wjs.mapper.UserMapper;
import com.wjs.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * UserService的实现类，提供用户相关的业务逻辑处理
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

//    @Autowired
//    private EventMapper eventMapper;
//
//    @Autowired
//    private EventCategoryMapper eventCategoryMapper;

    /**
     * 用户登录方法
     * 通过用户名和密码进行身份验证
     *
     * @param username 用户名
     * @param password 密码
     * @return 如果用户名和密码匹配，则返回用户对象；否则返回null
     */
    @Override
    public User login(String username, String password) {
        User user = userMapper.getByUsername(username);
        if (user != null && user.getPassword().equals(password)) {
            return user;
        }
        return null;
    }

    /**
     * 根据用户名获取用户信息
     *
     * @param username 用户名
     * @return 如果找到用户，则返回用户对象；否则返回null
     */
    @Override
    public User getByUsername(String username) {
        return userMapper.getByUsername(username);
    }

    /**
     * 用户注册方法
     * 在进行注册前，会检查用户名是否已存在
     *
     * @param user 待注册的用户对象
     * @throws BusinessException 如果用户名已存在，则抛出业务异常
     */
    @Override
    public void register(User user) {
        if (userMapper.getByUsername(user.getUsername()) != null) {
            throw new BusinessException("用户名已存在，请重新输入");
        }
        userMapper.insert(user);
    }

    /**
     * 更新用户信息的方法实现
     *
     * @param user 包含更新信息的User对象
     * @return 如果更新成功，则返回更新后的用户对象；否则返回null
     */
    @Override
    public User update(User user) {
        String oldUsername = userMapper.getByName(user.getRealName()).getUsername();
        int affectedRows = userMapper.update(user);
//        int eventAffectedRows = eventMapper.updateByUserId(oldUsername, user.getAccountName());
//        int eventCategoryAffectedRows = eventCategoryMapper.updateByUserId(oldUsername, user.getAccountName());
        if (affectedRows > 0) {
            // 更新成功后重新获取最新用户信息
            return userMapper.getByUsername(user.getUsername());
        } else {
            return null;
        }
    }

    /**
     * 忘记密码的方法实现
     *
     * @param user 包含用户名和邮箱的User对象
     * @return 如果用户名和邮箱匹配，则返回用户对象；否则返回null
     */
    @Override
    public User forgotPassword(User user) {
        int affectedRows = userMapper.forgotPassword(user);
        if (affectedRows > 0){
            return userMapper.getByUsername(user.getUsername());
        }
        return null;
    }

}
